package com.example.qt.ptplatform.controller;

import com.example.qt.ptplatform.entity.Torrent;
import com.example.qt.ptplatform.service.impl.TorrentServiceImpl;
import com.example.qt.ptplatform.utils.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Base64;

@RequestMapping(value = "torrent")
@RestController
public class TorrentController {

    @Autowired
    private TorrentServiceImpl torrentService;

    /**
     * 查询所有种子
     * @return
     */
    @RequestMapping(value = "findTorrentList", method = RequestMethod.GET)
    public List<Torrent> findTorrentList() {
        return torrentService.findTorrentList();
    }

    // 获取指定 torrent_id 的种子详情
    @GetMapping("/getTorrentDetails/{torrentId}")
    public JsonResult getTorrentDetails(@PathVariable("torrentId") int torrentId) {
        try {
            // 调用 Service 层获取指定 torrent_id 的种子详情
            Torrent torrent = torrentService.getTorrentDetailsById(torrentId);

            // 如果找到种子，返回数据
            if (torrent != null) {
                return JsonResult.success("获取种子详情成功", torrent);
            } else {
                // 如果种子未找到，返回错误信息
                return JsonResult.error("种子未找到");
            }
        } catch (Exception e) {
            // 处理异常，返回失败信息
            return JsonResult.error("获取种子详情失败", e.getMessage());
        }
    }

    // 删除种子接口
    @DeleteMapping("/deleteTorrent")
    public JsonResult deleteTorrent(@RequestParam("user_id") int userId, @RequestParam("torrent_id") int torrentId) {
        try {
            // 调用 Service 层删除种子，返回不同的状态
            String result = torrentService.deleteTorrent(userId, torrentId);

            // 判断删除操作结果
            if ("SUCCESS".equals(result)) {
                return JsonResult.success("删除种子成功");
            } else if ("TRORENT_NOT_FOUND".equals(result)) {
                return JsonResult.error("种子不存在");
            } else if ("NO_PERMISSION".equals(result)) {
                return JsonResult.error("无权限删除该种子");
            } else {
                return JsonResult.error("删除种子失败");
            }
        } catch (Exception e) {
            // 处理异常，返回失败信息
            return JsonResult.error("删除种子失败", e.getMessage());
        }
    }

    // 获取用户上传的种子列表
    @GetMapping("/getUserTorrents")
    public JsonResult getUserTorrents(@RequestParam("user_id") int userId) {
        try {
            // 调用 Service 层获取用户上传的种子列表
            List<Torrent> userTorrents = torrentService.getUserTorrents(userId);

            // 判断是否找到了种子记录
            if (userTorrents != null && !userTorrents.isEmpty()) {
                return JsonResult.success("获取用户上传的种子列表成功", userTorrents);
            } else {
                return JsonResult.error("没有找到用户上传的种子");
            }
        } catch (Exception e) {
            // 处理异常，返回失败信息
            return JsonResult.error("获取种子列表失败", e.getMessage());
        }
    }

    @PostMapping("/uploadCoverImage")
    public JsonResult uploadCoverImage(@RequestParam("torrentId") Integer torrentId,
                                       @RequestParam("file") MultipartFile coverImageFile) {
        boolean success = torrentService.uploadCoverImage(torrentId, coverImageFile);
        if (success) {
            return JsonResult.success("封面图片上传成功！");
        } else {
            return JsonResult.error("上传失败，资源未找到！");
        }
    }


    @GetMapping("/getCoverImage")
    public ResponseEntity<String> getCoverImage(@RequestParam("torrentId") Integer torrentId) {
        Torrent torrent = torrentService.getById(torrentId);
        if (torrent != null && torrent.getCoverImage() != null) {
            // 将二进制图片数据转换为 Base64 编码的字符串
            String base64Image = Base64.getEncoder().encodeToString(torrent.getCoverImage());

            // 返回 Base64 编码的图片字符串
            return ResponseEntity.ok()
                    .contentType(MediaType.APPLICATION_JSON)
                    .body(base64Image);
        }
        return ResponseEntity.status(HttpStatus.NOT_FOUND).build();  // 图片未找到
    }


    // 推荐系统接口
    @GetMapping("/recommend")
    public JsonResult recommendVideos(@RequestParam("torrentId") Integer torrentId) {
        try {
            // 调用 Service 层的推荐逻辑
            List<Torrent> recommendedTorrents = torrentService.recommendVideos(torrentId);
            return JsonResult.success("推荐视频获取成功", recommendedTorrents);
        } catch (RuntimeException e) {
            return JsonResult.error(e.getMessage());
        }
    }
}




